/**
 *@file
 *Header file contenente l'interfaccia del modulo GIOCO.
 */


/**
 * Se il tasto premuto è uno dei tasti direzionali cambia la ::direzione
 * se si è premuto il tasto 'p' si mette in attesa
 * finché non viene nuovamente premuto un tasto
 * in caso di pressione di altri tasti non fa alcunché
 *
 * @param[in] coda puntatore alla coda eventi
 * @param[in] ev evento input da tastiera, passato pre  riferimento
 * @param[in] direzione_s ::direzione attuale  
 */
void cambia_direzione(ALLEGRO_EVENT_QUEUE *coda , ALLEGRO_EVENT &ev,direzione &direzione_s); 


/**
 * Aggiorna coordinate snake e chiama ::genera_cibo in caso di collisione con cibo.
 * Salva le coordinate di snake[0] in una temporanea e le aggiorna a seconda della direzione
 * Verifica che le nuove coordinate non coincidano con le pareti o con altri elementi di snake
 * Verifica se le coordinate coincidono con quelle del cibo, in caso affermativo aggiorna punteggio
 * aggiorna posizione del nuovo elemento, riproduce suono e chiama ::genera_cibo
 * 
 * @param[in] snake vettore contenente le coordinate di ciascun elemento di snake
 * @param[in] dir ::direzione attuale 
 * @param[in] punti punteggio 
 * @param[in] cibo variabile di tipo ::caratteristiche contenente le coordinate del cibo
 * @return Vero se non si sono verificate collisioni con pareti o altri elementi 
 */
bool cambia_posizione(caratteristiche snake[],direzione dir,int & punti,caratteristiche & cibo);


/**
 * Inizializza le variabili per una nuova partita.
 * Assegna a snake[0] le coordinate x e y del centro della mappa
 * Inizializza a 0 la variabile punteggio e a t_zero la variabile tempo
 * setta il timer a velocità t_zero ed genera una nuova posizione per il cibo
 *
 * @param[in] snake vettore il cui primo elemento verrò settato a 0
 * @param[in] punteggio punteggio da settare a 0
 * @param[in] direzione_s direzione da porre==destra
 * @param[in] cibo  variabile contenente le coordinate del cibo (da inizializzare) 
 */ 

void resetta_snake(caratteristiche snake[],int & punteggio, direzione & direzione_s,caratteristiche &cibo);

/**
 * Disegna sul ::buffer le immagini da rappresentare durante la partita.
 * 
 * @param[in] cibo coordinate del cibo da rappresentare sul buffer
 * @param[in] snake vettore che rappresenta snake
 * @param[in] direzione_s direzione in cui verra disegnata la testa snake[0]
 * @param[in] punteggio per rappresentare il contapunti
 */ 

void disegna_gioco(caratteristiche cibo, const caratteristiche snake[],direzione direzione_s, int punteggio);

